package Servidor;

import java.util.ArrayList;
import Servidor.Examen;
import Servidor.Tema;
import java.util.Date;

public class Asignatura {

	private ArrayList<Examen> _listaExamenes = new ArrayList<Examen>();
	private AulaVirtual _sistema;
	private ArrayList<Tema> _listaTemas = new ArrayList<Tema>();
	private ArrayList<Usuario> _listaUsuarios = new ArrayList<Usuario>();
	private String _nombre;
	private int _numAlumnos;

	public Asignatura() {
	}

	public Asignatura(String _nombre) {
		this._nombre = _nombre;
		this._numAlumnos = 0;
	}

	public int getNumAlumnos() {
		int alumnos = 0;

		for (int i = 0; i < _listaUsuarios.size(); i++) {
			if (_listaUsuarios.get(i) instanceof Alumno) {
				alumnos++;
			}
		}

		return alumnos;
	}

	public String getNombre() {
		return this._nombre;
	}

	public void addUsuario(Usuario aU) {
		this._listaUsuarios.add(aU);
		this._numAlumnos++;
	}

	public Tema findTema(String aIdTema) {
		
		for (int i = 0; i < _listaTemas.size(); i++) {
			if (_listaTemas.get(i).getNombre().equals(aIdTema)) {
				return _listaTemas.get(i);
			}
		}
		return null;
	}

	public Examen ponerExamen(PaqDatos.InfoTema[] aTemas, Date aFechaIni, Date aFechaFin) throws Exception {
		Examen ex = new Examen(aFechaIni, aFechaFin);

		for (int i = 0; i < aTemas.length; i++) {
			Tema tema = findTema(aTemas[i].idTema);
			
			if (tema.getNumPreguntas() < aTemas[i].numPreguntas)
				throw new Exception("Se intentan seleccionar " + aTemas[i].numPreguntas + " en el tema " + aTemas[i].idTema + " cuando solo tiene " + tema.getNumPreguntas() + " introducidas.");
			
			ex.addTema(tema, aTemas[i].numPreguntas);
		}
		
		ex.setFechaInicial(aFechaIni);
		ex.setFechaFinal(aFechaFin);
		this.addExamen(ex);
		ex.setAsignatura(this);
		return ex;
	}

	public void addExamen(Examen aExamen) {
		_listaExamenes.add(aExamen);
	}

	public Examen findExamen(String ex) {
		for (int i = 0; i < this._listaExamenes.size(); i++) {
			if (this._listaExamenes.get(i).getIdExamen().equals(ex)) {
				return this._listaExamenes.get(i);
			}
		}
		return null;
	}
	
	public Examen[] getExamenes () {
		Examen[] examenes = new Examen[_listaExamenes.size()];
		
		for (int i = 0; i < _listaExamenes.size(); i++)
			examenes[i] = _listaExamenes.get(i);
		
		return examenes;
	}
	
	public void addTema(Tema t) {
		_listaTemas.add(t);
	}
	
	public boolean removeTema(Tema t) {
		
		for (int i = 0; i < _listaTemas.size(); i++) {
			
			if (_listaTemas.get(i) == t) {
				t.setActivo(false);
				return true;
			}
		}
		
		return false;
	}

    ArrayList<Tema> getTemas() {
        return _listaTemas;
    }
	
	ArrayList<Alumno> getAlumnos() {
		ArrayList<Alumno> ret = new ArrayList<Alumno>();
		
		for (int i = 0; i < _listaUsuarios.size(); i++)
			if (_listaUsuarios.get(i) instanceof Alumno)
				ret.add((Alumno) _listaUsuarios.get(i));
		
		return ret;
	}
}